<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>地址选择(省、市)</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        
        .address_box {
            width: 300px;
            padding: 20px;
            padding-bottom: 10px;
            border: 1px solid #dddddd;
            margin: 100px auto;
            text-align: center;
        }
        
        .address_box div {
            width: 100%;
            height: 40px;
            overflow: hidden;
            margin-bottom: 10px;
        }
        
        .address_box .show {
            height: 240px;
            overflow-y: scroll;
        }
        
        .address_box dl {
            width: 100%;
            cursor: pointer;
        }
        
        .address_box dl dt,
        .address_box dl dd {
            height: 40px;
            line-height: 40px;
            background: #05a4f8;
            color: #ffffff;
        }
        
        .address_box dl dd:hover {
            background: #000580;
        }

    </style>
</head>

<body>
    <div class="address_box">
        <div>
            <dl id="pro">
                <dt>--请选择省份--</dt>
            </dl>
        </div>
        <div>
            <dl id="city">
                <dt>--请选择城市--</dt>
            </dl>
        </div>
    </div>
</body>
<script>
    var address_json = {
        "北京市": ["北京市"],
        "天津市": ["天津市"],
        "河北省": ["石家庄市", "唐山市", "秦皇岛市", "邯郸市", "邢台市", "保定市", "张家口市", "承德市", "沧州市", "廊坊市", "衡水市"],
        "山西省": ["太原市", "大同市", "阳泉市", "长治市", "晋城市", "朔州市", "晋中市", "运城市", "忻州市", "临汾市", "吕梁市"],
        "内蒙古自治区": ["呼和浩特市", "包头市", "乌海市", "赤峰市", "通辽市", "鄂尔多斯市", "呼伦贝尔市", "巴彦淖尔市", "乌兰察布市", "兴安盟", "锡林郭勒盟", "阿拉善盟"],
        "辽宁省": ["沈阳市", "大连市", "鞍山市", "抚顺市", "本溪市", "丹东市", "锦州市", "营口市", "阜新市", "辽阳市", "盘锦市", "铁岭市", "朝阳市", "葫芦岛市"],
        "吉林省": ["长春市", "吉林市", "四平市", "辽源市", "通化市", "白山市", "松原市", "白城市", "延边朝鲜族自治州"],
        "黑龙江省": ["哈尔滨市", "齐齐哈尔市", "鸡西市", "鹤岗市", "双鸭山市", "大庆市", "伊春市", "佳木斯市", "七台河市", "牡丹江市", "黑河市", "绥化市", "大兴安岭地区"],
        "上海市": ["上海市"],
        "江苏省": ["南京市", "无锡市", "徐州市", "常州市", "苏州市", "南通市", "连云港市", "淮安市", "盐城市", "扬州市", "镇江市", "泰州市", "宿迁市"],
        "浙江省": ["杭州市", "宁波市", "温州市", "嘉兴市", "湖州市", "绍兴市", "金华市", "衢州市", "舟山市", "台州市", "丽水市"],
        "安徽省": ["合肥市", "芜湖市", "蚌埠市", "淮南市", "马鞍山市", "淮北市", "铜陵市", "安庆市", "黄山市", "滁州市", "阜阳市", "宿州市", "六安市", "亳州市", "池州市", "宣城市"],
        "福建省": ["福州市", "厦门市", "莆田市", "三明市", "泉州市", "漳州市", "南平市", "龙岩市", "宁德市"],
        "江西省": ["南昌市", "景德镇市", "萍乡市", "九江市", "新余市", "鹰潭市", "赣州市", "吉安市", "宜春市", "抚州市", "上饶市"],
        "山东省": ["济南市", "青岛市", "淄博市", "枣庄市", "东营市", "烟台市", "潍坊市", "济宁市", "泰安市", "威海市", "日照市", "莱芜市", "临沂市", "德州市", "聊城市", "滨州市", "菏泽市"],
        "河南省": ["郑州市", "开封市", "洛阳市", "平顶山市", "安阳市", "鹤壁市", "新乡市", "焦作市", "濮阳市", "许昌市", "漯河市", "三门峡市", "南阳市", "商丘市", "信阳市", "周口市", "驻马店市"],
        "湖北省": ["武汉市", "黄石市", "十堰市", "宜昌市", "襄阳市", "鄂州市", "荆门市", "孝感市", "荆州市", "黄冈市", "咸宁市", "随州市", "恩施土家族苗族自治州"],
        "湖南省": ["长沙市", "株洲市", "湘潭市", "衡阳市", "邵阳市", "岳阳市", "常德市", "张家界市", "益阳市", "郴州市", "永州市", "怀化市", "娄底市", "湘西土家族苗族自治州"],
        "广东省": ["广州市", "韶关市", "深圳市", "珠海市", "汕头市", "佛山市", "江门市", "湛江市", "茂名市", "肇庆市", "惠州市", "梅州市", "汕尾市", "河源市", "阳江市", "清远市", "东莞市", "中山市", "潮州市", "揭阳市", "云浮市"],
        "广西壮族自治区": ["南宁市", "柳州市", "桂林市", "梧州市", "北海市", "防城港市", "钦州市", "贵港市", "玉林市", "百色市", "贺州市", "河池市", "来宾市", "崇左市"],
        "海南省": ["海口市", "三亚市", "三沙市", "儋州市"],
        "重庆市": ["重庆市"],
        "四川省": ["成都市", "自贡市", "攀枝花市", "泸州市", "德阳市", "绵阳市", "广元市", "遂宁市", "内江市", "乐山市", "南充市", "眉山市", "宜宾市", "广安市", "达州市", "雅安市", "巴中市", "资阳市", "阿坝藏族羌族自治州", "甘孜藏族自治州", "凉山彝族自治州"],
        "贵州省": ["贵阳市", "六盘水市", "遵义市", "安顺市", "毕节市", "铜仁市", "黔西南布依族苗族自治州", "黔东南苗族侗族自治州", "黔南布依族苗族自治州"],
        "云南省": ["昆明市", "曲靖市", "玉溪市", "保山市", "昭通市", "丽江市", "普洱市", "临沧市", "楚雄彝族自治州", "红河哈尼族彝族自治州", "文山壮族苗族自治州", "西双版纳傣族自治州", "大理白族自治州", "德宏傣族景颇族自治州", "怒江傈僳族自治州", "迪庆藏族自治州"],
        "西藏自治区": ["拉萨市", "日喀则市", "昌都市", "林芝市", "山南市", "那曲地区", "阿里地区"],
        "陕西省": ["西安市", "铜川市", "宝鸡市", "咸阳市", "渭南市", "延安市", "汉中市", "榆林市", "安康市", "商洛市"],
        "甘肃省": ["兰州市", "嘉峪关市", "金昌市", "白银市", "天水市", "武威市", "张掖市", "平凉市", "酒泉市", "庆阳市", "定西市", "陇南市", "临夏回族自治州", "甘南藏族自治州"],
        "青海省": ["西宁市", "海东市", "海北藏族自治州", "黄南藏族自治州", "海南藏族自治州", "果洛藏族自治州", "玉树藏族自治州", "海西蒙古族藏族自治州"],
        "宁夏回族自治区": ["银川市", "石嘴山市", "吴忠市", "固原市", "中卫市"],
        "新疆维吾尔自治区": ["乌鲁木齐市", "克拉玛依市", "吐鲁番市", "哈密市", "昌吉回族自治州", "博尔塔拉蒙古自治州", "巴音郭楞蒙古自治州", "阿克苏地区", "克孜勒苏柯尔克孜自治州", "喀什地区", "和田地区", "伊犁哈萨克自治州", "塔城地区", "阿勒泰地区"]
    }
    var pro = document.getElementById('pro');
    var city = document.getElementById('city');

    //遍历json
    for (var key in address_json) {
        //创建省份单元
        var oPro = document.createElement('dd');
        oPro.innerHTML = key;
        //显示选中的省份，且隐藏其他省份单元
        oPro.onclick = function() {
            pro.children[0].innerHTML = this.innerHTML;
            pro.parentNode.className = '';
            pro.parentNode.scrollTop = 0;

            //复原城市选区
            city.children[0].innerHTML = '--请选择城市--';
            //删除上次选择省份所对应的城市单元
            while (city.children.length != 1) {
                city.removeChild(city.children[1]);
            }

            //获取选中省份所对应的城市列表
            var cityList = address_json[this.innerHTML];
            for (var i = 0; i < cityList.length; i++) {
                //创建城市单元
                var oCity = document.createElement('dd');
                oCity.innerHTML = cityList[i];
                //显示选中的城市，且隐藏其他城市单元
                oCity.onclick = function() {
                    city.children[0].innerHTML = this.innerHTML;
                    city.parentNode.className = '';
                    city.parentNode.scrollTop = 0;
                }
                //插入省份单元
                city.appendChild(oCity);
            }

        }
        //插入省份单元
        pro.appendChild(oPro);
    }

    //显示所有的的省份单元
    pro.children[0].onclick = function(event) {
        var e = event || window.event;
        if (e.stopPropagation) {
            e.stopPropagation();
        } else {
            e.cancelBubble = true;
        }
        //console.log(this);
        this.parentNode.parentNode.className = 'show';
    }
    //显示所有城市单元
    city.children[0].onclick = function(event) {
        var e = event || window.event;
        if (e.stopPropagation) {
            e.stopPropagation();
        } else {
            e.cancelBubble = true;
        }
        //console.log(this);
        this.parentNode.parentNode.className = 'show';
    }
    document.onclick = function() {
        pro.parentNode.className = '';
        city.parentNode.className = '';
    }

</script>

</html>
